﻿#region Copyright

// // The contents of this file are subject to the Mozilla Public License
// // Version 1.1 (the "License"); you may not use this file except in compliance
// // with the License. You may obtain a copy of the License at
// //   
// // http://www.mozilla.org/MPL/
// //   
// // Software distributed under the License is distributed on an "AS IS"
// // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
// // License for the specific language governing rights and limitations under 
// // the License.
// //   
// // The Initial Developer of the Original Code is Robert Smyth.
// // Portions created by Robert Smyth are Copyright (C) 2008-2013.
// //   
// // All Rights Reserved.

#endregion

using NDependencyInjection.interfaces;
using NoeticTools.NWorkflow.Steps;


namespace NoeticTools.NWorkflow
{
    public class CompositeStepRules<TResult, TStepResult> : Step<TResult, TStepResult>
    {
        private readonly IWorkflow<TStepResult> _innerWorkflow;
        private readonly IWorkflowRunner<TResult> _workflowRunner;

        public CompositeStepRules(IWorkflowRunner<TResult> workflowRunner, IWorkflowRules<TResult> workflowRules, string name, IWorkflowRules<TStepResult> innerWorkflowRules,
                                  ISystemDefinition system)
            : base(workflowRunner, workflowRules, name, system)
        {
            _workflowRunner = workflowRunner;
            _innerWorkflow = innerWorkflowRules.CreateWorkflow(name, _workflowRunner.TimerFactory);
            StepRuleProgress = _innerWorkflow.Progress;
            Progress = new StepProgressMonitor(StepRuleProgress, workflowRunner, this,
                                               StepRuleProgress.ProgressAvailable, _logger);

            OnEntry.Start(_innerWorkflow);
        }
    }
}